package com.macro.mall.oms.service.order;

import com.github.pagehelper.Page;
import com.macro.mall.oms.domain.OrderItem;
import com.macro.mall.oms.entity.OrderItemEntity;
import com.macro.mall.oms.service.order.bo.InsertOrderItemInput;
import com.macro.mall.oms.service.order.bo.PagedQueryOrderItemInput;
import com.macro.mall.oms.service.order.bo.UpdateOrderItemInput;

import java.util.List;

/**
 * 订单明细Service
 *
 * @author xuyanjun
 * @date 2019-12-10
 */
public interface OrderItemService {

    /**
     * 新增订单明细
     *
     * @param input input
     * @return 新增id
     */
    long insert(InsertOrderItemInput input);

    /**
     * 修改订单明细
     *
     * @param input input
     */
    void update(UpdateOrderItemInput input);

    /**
     * 删除订单明细
     *
     * @param id id
     */
    void delete(long id);

    /**
     * 根据Id获取订单明细
     *
     * @param id id
     * @return 订单明细
     */
    OrderItemEntity getById(long id);

    /**
     * 根据批量Id获取订单明细
     *
     * @param batchIds 批量ids
     * @return 订单明细集合
     */
    List<OrderItemEntity> listByBatchIds(List<Long> batchIds);

    /**
     * 根据批量Id获取订单明细
     *
     * @param orderIds 批量ids
     * @return 订单明细集合
     */
    List<OrderItemEntity> listByBatchOrderIds(List<Long> orderIds);

    /**
     * 分页查询
     *
     * @param input input
     * @return 分页的订单明细
     */
    Page<OrderItemEntity> pagedQuery(PagedQueryOrderItemInput input);

    /**
     * 将实体对象转换成domain对象
     *
     * @param orderItemEntity 实体
     * @return orderItem
     */
    OrderItem entityToDomain(OrderItemEntity orderItemEntity);

    /**
     * 将实体对象转换成domain对象
     *
     * @param orderItemEntities 实体
     * @return orderItems
     */
    List<OrderItem> entityToDomain(List<OrderItemEntity> orderItemEntities);

}